package unq.edu.cui.tp.arena;

import java.awt.Label;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.bindings.NotNullObservable;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.widgets.*;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;

import unq.edu.cui.tp.dominio.Asignacion;
import unq.edu.cui.tp.dominio.Empleado;
import unq.edu.cui.tp.dominio.Planificacion;
import unq.edu.cui.tp.modelo.ventanas.BooleanToSiNoTransformer;
import unq.edu.cui.tp.modelo.ventanas.CrearAsignacion;

public class CrearAsignacionWindow extends SimpleWindow<CrearAsignacion> {

	public CrearAsignacionWindow(WindowOwner parent, CrearAsignacion model) {
		super(parent, model);
		// TODO Auto-generated constructor stub
	}


	@Override
	protected void addActions(Panel actionsPanel) {
		
		
		
		Button asignar = new Button(actionsPanel).setCaption("Asignar").onClick(new MessageSend(this, "asignar"));
		new Button(actionsPanel).setCaption("Cerrar").onClick(new MessageSend(this, "close"));
		
		// Deshabilitar el boton 'Borrar' si no hay ningún elemento seleccionado en la tabla.
		NotNullObservable elementSelected = new NotNullObservable("empleadoSeleccionado");
		asignar.bindEnabled(elementSelected);
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		new org.uqbar.arena.widgets.Label(mainPanel).setText("Agregar una asignación para el " + this.getModelObject().getPlanificacion().getFechaSimple());
		Panel form = new Panel(mainPanel);
    	form.setLayout(new ColumnLayout(5));
		this.setTitle("Crear asignación");
		
        new org.uqbar.arena.widgets.Label(form).setText("Desde");
        Selector hd = new Selector<Integer>(form);
        hd.bindItemsToProperty("horas");
        hd.bindValueToProperty("desde");
        
        new org.uqbar.arena.widgets.Label(form).setText("Hasta");
        Selector hh = new Selector<Integer>(form);
        hh.bindItemsToProperty("horas");
        hh.bindValueToProperty("hasta");
        
        new Button(mainPanel).setCaption("Buscar").onClick(new MessageSend(this, "buscar"));
        
        
        this.createGrid(mainPanel);

	}
	
	protected void createGrid(Panel mainPanel) {
		
		Table<Empleado> table = new Table<Empleado>(mainPanel, Empleado.class);
		table.setHeigth(200);
		table.setWidth(450);

		table.bindItemsToProperty("resultadoBusqueda");
		table.bindValueToProperty("empleadoSeleccionado");

		this.describeGrid(table);
	}

	protected void describeGrid(Table<Empleado> table) {
		new Column<Empleado>(table)
			.setTitle("Empleado")
			.setFixedSize(300)
			.bindContentsToProperty("nombreCompleto");
	
		new Column<Empleado>(table)
			.setTitle("Disponible")
			.setFixedSize(100)
			.bindContentsToTransformer(new BooleanToSiNoTransformer());
	}
	
	
	public void buscar(){
		this.getModelObject().getSistema().buscar(this.getModelObject().getPlanificacion().getFecha(), this.getModelObject().getDesde(), this.getModelObject().getHasta());
	}
	
	public void asignar(){
		this.getModelObject().agregarAsignacion(new Asignacion(this.getModelObject().getEmpleadoSeleccionado(), this.getModelObject().getDesde(), this.getModelObject().getHasta()));
		this.close();
	}
	

}
